{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "import math\n",
    "import random\n",
    "import pandas as pd\n",
    "# from Utils import modelsave\n",
    "from collections import defaultdict\n",
    "from operator import itemgetter\n",
    "\n",
    "def LoadMovieLensData(filepath, train_rate):\n",
    "    # ratings = pd.read_table(filepath, sep=\"::\", header=None, names=[\"UserID\", \"MovieID\", \"Rating\", \"TimeStamp\"],\\\n",
    "    #                         engine='python')\n",
    "    # ratings = ratings[['UserID','MovieID']]\n",
    "\n",
    "    train = []\n",
    "    test = []\n",
    "    random.seed(3)\n",
    "    ratings = pd.read_csv(filepath)\n",
    "    for idx, row in ratings.iterrows():\n",
    "\n",
    "        user = int(row['userId'])\n",
    "        item = int(row['tid'])\n",
    "        \n",
    "        if random.random() < train_rate:\n",
    "            train.append([user, item])\n",
    "        else:\n",
    "            test.append([user, item])\n",
    "    return PreProcessData(train), PreProcessData(test)\n",
    "\n",
    "def PreProcessData(originData):\n",
    "    \"\"\"\n",
    "    建立User-Item表，结构如下：\n",
    "        {\"User1\": {MovieID1, MoveID2, MoveID3,...}\n",
    "         \"User2\": {MovieID12, MoveID5, MoveID8,...}\n",
    "         ...\n",
    "        }\n",
    "    \"\"\"\n",
    "    trainData = dict()\n",
    "    for user, item in originData:\n",
    "        trainData.setdefault(user, set())\n",
    "        trainData[user].add(item)\n",
    "    \n",
    "    with open('tmp.txt','w') as file:             \n",
    "        for x,y in trainData.items(): \n",
    "            print(str(x) + ' ' + str(y) + '\\n')\n",
    "            file.write(str(x) + ' ' + str(y) + '\\n')\n",
    "    return trainData\n",
    "\n",
    "class UserCF(object):\n",
    "    \"\"\" User based Collaborative Filtering Algorithm Implementation\"\"\"\n",
    "    def __init__(self, trainData, similarity=\"cosine\"):\n",
    "        self._trainData = trainData\n",
    "        self._similarity = similarity\n",
    "        self._userSimMatrix = dict() # 用户相似度矩阵\n",
    "\n",
    "    def similarity(self):\n",
    "        # 建立User-Item倒排表\n",
    "        item_user = dict()\n",
    "        for user, items in self._trainData.items():\n",
    "            for item in items:\n",
    "                item_user.setdefault(item, set())\n",
    "                item_user[item].add(user)\n",
    "\n",
    "        # 建立用户物品交集矩阵W, 其中C[u][v]代表的含义是用户u和用户v之间共同喜欢的物品数\n",
    "        for item, users in item_user.items():\n",
    "            for u in users:\n",
    "                for v in users:\n",
    "                    if u == v:\n",
    "                        continue\n",
    "                    self._userSimMatrix.setdefault(u, defaultdict(int))\n",
    "                    if self._similarity == \"cosine\":\n",
    "                        self._userSimMatrix[u][v] += 1 #将用户u和用户v共同喜欢的物品数量加一\n",
    "                    elif self._similarity == \"iif\":\n",
    "                        self._userSimMatrix[u][v] += 1. / math.log(1 + len(users))\n",
    "\n",
    "        # 建立用户相似度矩阵\n",
    "        for u, related_user in self._userSimMatrix.items():\n",
    "            # 相似度公式为 |N[u]∩N[v]|/sqrt(N[u]||N[v])\n",
    "            for v, cuv in related_user.items():\n",
    "                nu = len(self._trainData[u])\n",
    "                nv = len(self._trainData[v])\n",
    "                self._userSimMatrix[u][v] = cuv / math.sqrt(nu * nv)\n",
    "\n",
    "    def recommend(self, user, N, K):\n",
    "        \"\"\"\n",
    "        用户u对物品i的感兴趣程度：\n",
    "            p(u,i) = ∑WuvRvi\n",
    "            其中Wuv代表的是u和v之间的相似度， Rvi代表的是用户v对物品i的感兴趣程度，因为采用单一行为的隐反馈数据，所以Rvi=1。\n",
    "            所以这个表达式的含义是，要计算用户u对物品i的感兴趣程度，则要找到与用户u最相似的K个用户，对于这k个用户喜欢的物品且用户u\n",
    "            没有反馈的物品，都累加用户u与用户v之间的相似度。\n",
    "        :param user: 被推荐的用户user\n",
    "        :param N: 推荐的商品个数\n",
    "        :param K: 查找的最相似的用户个数\n",
    "        :return: 按照user对推荐物品的感兴趣程度排序的N个商品\n",
    "        \"\"\"\n",
    "        recommends = dict()\n",
    "        # 先获取user具有正反馈的item数组\n",
    "        related_items = self._trainData[user]\n",
    "        # 将其他用户与user按照相似度逆序排序之后取前K个\n",
    "        for v, sim in sorted(self._userSimMatrix[user].items(), key=itemgetter(1), reverse=True)[:K]:\n",
    "            # 从与user相似的用户的喜爱列表中寻找可能的物品进行推荐\n",
    "            for item in self._trainData[v]:\n",
    "                # 如果与user相似的用户喜爱的物品与user喜欢的物品重复了，直接跳过\n",
    "                if item in related_items:\n",
    "                    continue\n",
    "                recommends.setdefault(item, 0.)\n",
    "                recommends[item] += sim\n",
    "        # 根据被推荐物品的相似度逆序排列，然后推荐前N个物品给到用户\n",
    "        return dict(sorted(recommends.items(), key=itemgetter(1), reverse=True)[:N])\n",
    "\n",
    "    def train(self):\n",
    "        self.similarity()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Start\n",
    "train, test = LoadMovieLensData('./comment_data.csv', 0.8)\n",
    "print(\"train data size: %d, test data size: %d\" % (len(train), len(test)))\n",
    "UserCF = UserCF(train)\n",
    "UserCF.train()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{25276237: 25.867629404443573, 80556: 18.166424918888424, 24301253: 13.763926038380744, 10524120: 12.476417750593958, 80269: 12.370464779901129, 76144: 11.157973067687912, 76154: 6.318423016023338, 75618: 5.723234477438853, 80267: 4.145884208249226, 124908212: 3.646264369941972}\n",
      "[8, 11, 13, 18, 27, 30, 32, 34, 36, 37, 41, 50, 52, 53, 54, 57, 58, 59, 63, 67, 68, 70, 75, 81, 82, 84, 94, 96, 97, 105, 111, 130, 147, 154, 156, 160, 166, 167, 170, 172, 182, 185, 186, 187, 189, 190, 193, 202, 204, 206, 207, 208, 217, 221, 227, 230, 231, 232, 235, 248, 249, 269, 284, 285, 287, 292, 294, 307, 310, 312, 314, 315, 324, 328, 341, 351, 355, 366, 370, 382, 386, 387, 391, 394, 400, 401, 407, 409, 415, 426, 432, 433, 435, 442, 445, 458, 461, 479, 490, 501, 513, 514, 515, 520, 523, 540, 541, 550, 552, 555, 557, 561, 562, 563, 582, 610, 623, 627, 632, 278, 642, 644, 645, 646, 650, 653, 658, 662, 664, 685, 687, 688, 690, 696, 709, 720, 723, 725, 729, 733, 738, 740, 756, 762, 764, 765, 767, 770, 771, 772, 776, 777, 778, 800, 801, 802, 810, 813, 814, 817, 827, 829, 840, 847, 848, 854, 860, 861, 864, 865, 872, 876, 878, 56, 883, 884, 892, 897, 898, 901, 904, 907, 908, 914, 921, 923, 926, 934, 936, 938, 946, 947, 949, 954, 960, 963, 964, 965, 968, 981, 984, 985, 987, 988, 993, 995, 998, 116, 1014, 1015, 1016, 1017, 1019, 1026, 1030, 1031, 1037, 1040, 1042, 1046, 1048, 1056, 1068, 1071, 128, 1072, 1076, 1079, 1082, 1088, 1097, 1102, 1105, 1106, 1109, 1115, 1121, 1124, 1129, 1135, 1136, 1143, 1145, 136, 1147, 1154, 1179, 1183, 1186, 1187, 1189, 1197, 1200, 1204, 1209, 1210, 1212, 900, 1241, 1242, 1248, 1250, 1253, 1261, 1266, 1274, 1279, 1290, 1291, 1297, 1300, 1310, 1317, 1328, 1330, 1332, 1338, 1363, 1368, 1371, 1376, 1382, 1383, 1393, 1395, 1406, 1410, 641, 174, 1463, 1465, 1466, 1468, 1471, 1474, 1476, 1477, 1481, 1485, 1488, 1491, 1494, 1497, 1499, 1508, 1509, 1511, 1516, 1517, 1518, 1523, 1525, 1527, 1531, 1540, 1555, 1559, 1571, 1573, 1579, 1580, 1581, 1582, 1589, 1591, 1594, 1596, 1603, 1612, 1616, 1623, 1627, 1638, 1642, 1649, 1657, 1661, 1672, 1677, 1689, 1194, 1707, 1711, 1712, 784, 1718, 1719, 1722, 1731, 1734, 1740, 1742, 1747, 1752, 1759, 1760, 1761, 1762, 1764, 1765, 1766, 1774, 1777, 1785, 1786, 1790, 1800, 1803, 1806, 1816, 1572, 1822, 1825, 1830, 1833, 1835, 1838, 1844, 1848, 1852, 1853, 1862, 1864, 1865, 1874, 1879, 1884, 1886, 1888, 1895, 1896, 1897, 1899, 1908, 1912, 1913, 1916, 1917, 1924, 1926, 1928, 1929, 1930, 1934, 1936, 1939, 1946, 1948, 1949, 1965, 1967, 1969, 1978, 1980, 1984, 1987, 1994, 2000, 2002, 548, 2008, 2026, 2030, 2039, 2051, 2054, 2056, 2060, 2061, 2062, 2070, 2075, 2078, 2081, 2083, 2084, 2092, 2099, 2100, 2102, 2106, 2109, 2112, 2116, 2120, 2127, 2128, 2129, 2138, 2141, 2146, 2148, 2150, 2161, 2164, 2167, 2172, 2183, 2195, 2200, 2067, 2203, 2218, 2221, 2234, 2240, 2241, 2252, 2262, 2275, 2276, 2281, 2282, 2285, 2289, 2290, 2296, 2297, 2207, 2302, 2239, 2316, 2319, 2325, 369, 2335, 2338, 2339, 2341, 805, 2355, 2359, 2360, 2361, 2362, 1829, 2376, 2380, 2383, 2385, 2399, 2401, 2403, 2404, 2409, 2415, 2418, 2423, 2424, 2427, 2443, 2449, 2457, 2459, 2461, 2464, 2465, 2466, 2470, 2471, 2473, 2474, 2479, 2485, 2486, 2489, 2496, 2497, 2501, 2502, 2504, 2508, 2511, 1646, 2529, 2532, 2536, 2540, 2541, 2546, 2556, 2561, 2569, 2570, 2573, 2577, 2581, 2582, 2584, 2592, 2593, 2594, 2602, 2606, 2616, 2629, 2640, 2641, 2643, 2647, 2657, 2658, 2671, 2672, 2682, 2685, 2687, 2688, 2702, 2718, 2720, 2722, 2723, 2727, 2729, 2730, 2750, 2753, 2754, 2767, 2769, 2774, 2777, 2780, 2790, 2801, 2816, 2818, 2822, 2828, 2829, 2833, 2837, 2840, 2841, 2842, 2852, 2861, 2863, 2867, 2868, 2872, 2892, 2902, 2916, 2919, 2922, 2923, 2935, 2936, 2937, 2941, 2945, 2948, 2955, 2956, 2980, 2983, 2988, 2989, 3004, 3008, 3019, 3026, 3033, 3036, 3038, 3043, 3048, 3050, 3053, 3055, 3058, 3065, 3067, 3071, 3072, 3080, 3085, 3090, 3094, 3103, 3104, 3105, 3107, 3110, 3112, 3118, 3122, 924, 3140, 3144, 3156, 3163, 3167, 3168, 3169, 3170, 3172, 3178, 3181, 3182, 3183, 3186, 3188, 3198, 3202, 3212, 3214, 3218, 3229, 3233, 3236, 3247, 3253, 3260, 3263, 3275, 3277, 3282, 3285, 3302, 3308, 3312, 3319, 3328, 3337, 3342, 3358, 3359, 3360, 3362, 3364, 3365, 3368, 3374, 3378, 3380, 3381, 3382, 3392, 3398, 992, 3403, 3419, 3420, 1819, 3430, 3431, 3439, 3441, 3451, 3458, 3460, 3464, 3469, 3470, 3473, 3480, 3494, 3495, 3503, 3511, 3512, 3513, 3515, 3516, 3530, 3534, 3535, 3538, 3540, 3542, 3549, 3550, 3557, 3558, 3564, 3570, 3571, 3579, 3599, 3611, 3621, 3624, 3626, 3629, 3638, 3650, 3651, 3656, 3657, 3661, 3665, 3671, 3676, 3677, 3678, 3687, 3689, 3695, 3699, 3701, 3703, 3709, 3716, 3722, 3726, 3728, 3729, 3733, 3736, 3739, 3744, 3745, 3746, 3749, 3756, 3761, 3765, 3769, 1117, 2862, 3779, 3784, 3787, 3789, 3796, 3802, 3810, 3811, 3812, 3813, 3816, 3817, 1178, 3824, 3825, 1108, 3832, 3833, 3834, 3839, 3841, 3843, 3845, 3864, 3867, 3870, 3879, 3883, 3889, 1389, 3898, 3900, 3902, 3920, 1259, 3931, 3936, 3943, 3950, 3958, 3966, 3968, 3970, 3971, 3904, 3975, 3886, 3984, 3985, 3986, 3991, 3997, 4009, 4013, 4015, 4017, 4021, 4024, 4025, 4026, 4028, 4030, 4031, 4033, 4036, 4037, 4039, 4040, 4043, 4044, 4049, 4059, 1846, 4070, 4072, 4079, 4084, 4085, 4088, 1561, 4091, 4092, 4093, 4095, 4099, 4102, 1564, 4108, 4114, 4115, 4119, 4128, 1298, 4141, 4143, 4149, 4155, 4164, 4165, 4167, 4172, 4176, 4177, 4186, 4189, 4195, 4201, 4204, 4206, 4208, 4210, 4219, 4223, 4226, 4227, 4229, 4242, 4245, 4247, 4250, 4262, 4264, 4270, 4271, 4273, 4274, 4277, 4286, 4292, 4296, 4304, 4306, 4309, 4310, 4314, 4317, 4322, 4325, 4327, 4330, 4332, 4335, 4337, 4343, 4350, 4352, 4354, 4361, 4373, 4375, 4383, 4387, 4393, 4170, 4400, 4405, 4411, 4431, 4434, 4436, 4448, 4450, 4451, 4453, 4454, 4455, 4460, 4469, 4472, 4491, 4492, 4493, 4500, 4501, 4503, 4510, 4520, 4525, 4530, 4536, 4540, 4541, 4547, 4548, 4553, 4557, 4561, 4563, 4564, 4567, 4569, 4572, 4575, 4577, 4586, 4589, 4600, 4618, 4623, 4637, 4654, 4659, 4661, 4673, 4681, 4696, 4702, 4704, 4707, 4713, 4721, 4725, 4733, 4738, 4739, 4751, 4765, 4766, 4770, 4772, 4776, 4781, 4782, 4784, 4786, 4789, 4794, 4796, 4797, 4804, 4807, 4816, 4817, 4819, 4824, 4831, 4834, 4836, 4844, 4861, 4867, 4868, 4869, 4874, 4876, 4879, 4880, 4884, 4889, 4898, 4900, 4911, 4921, 4927, 4930, 4934, 4940, 4942, 4946, 4947, 4950, 4954, 4955, 4960, 4969, 2952, 4983, 4991, 4992, 4995, 4999, 5007, 5010, 5026, 5031, 5036, 5039, 5045, 5051, 5059, 5072, 5074, 5076, 3030, 5083, 5085, 5100, 5102, 5104, 5115, 5116, 5122, 5125, 5128, 5129, 5134, 5135, 5136, 5139, 5140, 5141, 5157, 5159, 5165, 5173, 5174, 5184, 5192, 5195, 5206, 5207, 5213, 5217, 5219, 5232, 1247, 886, 5238, 5249, 5253, 5254, 5257, 5263, 2832, 5273, 5276, 2856, 5280, 5285, 5286, 5288, 5289, 1258, 5306, 5307, 2691, 5319, 5097, 5322, 5330, 1201, 5343, 5346, 5360, 5361, 1112, 5370, 5373, 5375, 5379, 5382, 5383, 5387, 5389, 5390, 5393, 5402, 5417, 5424, 5427, 5438, 5444, 5452, 5455, 5458, 5464, 5472, 5202, 1080, 5475, 5482, 5483, 5485, 5498, 5514, 5517, 5522, 5528, 5530, 5531, 5537, 5542, 5551, 1018, 5568, 5573, 5576, 1264, 5585, 5523, 5595, 5596, 5600, 5605, 5606, 5609, 5610, 5612, 5616, 342, 5619, 5621, 5544, 5628, 5630, 5633, 5634, 5638, 5647, 5652, 5654, 5656, 5657, 5660, 5190, 5662, 372, 390, 5666, 5678, 1207, 219, 5683, 5689, 5691, 5692, 5693, 5703, 5712, 5714, 5715, 5721, 5727, 5728, 5746, 871, 5756, 5766, 5772, 5775, 5777, 5779, 5781, 5787, 5788, 5797, 5802, 5815, 5820, 5827, 5832, 5842, 5844, 1954, 5855, 5858, 5888, 5892, 5894, 5907, 5912, 5913, 5916, 196, 5922, 5930, 5938, 5940, 171, 5950, 5951, 5952, 5962, 5983, 5987, 5992, 1942, 5995, 5996, 6014, 6018, 6028, 6031, 6034, 1369, 6041, 6042, 6046, 6050, 6059, 6060, 6078, 6079, 6081, 6087, 6093, 6107, 6112, 6125, 6127, 6130, 6135, 6136, 6140, 6141, 6149, 6155, 6157, 6166, 6171, 6175, 6177, 6179, 6181, 6188, 6191, 6194, 6195, 6196, 6198, 6200, 6201, 6204, 6212, 6216, 6219, 6222, 6230, 6235, 6242, 6245, 982, 6247, 6258, 6267, 6272, 6275, 6277, 6280, 6281, 6297, 6298, 6314, 6323, 6327, 6328, 1301, 6332, 6338, 6349, 6359, 6361, 6364, 6369, 6375, 6380, 6381, 2044, 6383, 6386, 6388, 215, 6395, 6400, 6404, 6407, 1866, 6411, 6412, 6415, 6416, 6418, 6419, 6271, 6424, 6428, 6430, 6434, 6439, 6441, 6446, 6447, 6469, 6472, 2202, 6477, 6483, 6492, 6497, 35, 6512, 6513, 6516, 6523, 6530, 6532, 6533, 6534, 6546, 2159, 6556, 6560, 6563, 6564, 3262, 6572, 6573, 6410, 6583, 6584, 6593, 6343, 6611, 6612, 6614, 6615, 2187, 6621, 6622, 6627, 6629, 6633, 6636, 6637, 6639, 6640, 6642, 6644, 6646, 6655, 6659, 5975, 6662, 6668, 6669, 6670, 6674, 6677, 6678, 6681, 6684, 6689, 6691, 152, 6706, 6708, 6715, 6716, 6718, 6719, 6720, 6721, 6723, 6724, 6725, 6731, 6734, 6738, 6745, 6747, 6751, 6755, 6761, 6770, 6776, 6777, 6781, 6783, 6787, 6803, 6804, 6813, 6816, 6817, 6818, 6824, 6828, 6384, 6846, 6849, 6851, 6852, 6865, 6867, 6872, 6883, 6885, 6887, 6889, 6890, 6893, 6899, 6902, 6904, 6908, 6911, 6913, 6919, 6922, 6924, 6931, 6943, 6951, 6957, 6958, 6962, 6963, 6964, 6965, 6966, 6968, 6973, 6978, 6982, 6984, 6986, 6994, 7002, 2322, 7006, 7010, 7016, 7023, 7033, 7035, 7040, 7041, 7051, 7060, 6287, 7066, 7069, 7078, 7080, 7081, 7083, 7084, 7090, 7092, 7093, 7104, 7105, 7106, 7108, 7109, 7110, 7112, 7114, 7118, 7125, 7146, 7148, 7150, 7152, 7155, 7156, 7165, 7167, 7172, 7173, 7183, 7191, 7195, 6007, 7201, 7202, 7215, 7218, 1921, 5446, 7223, 5448, 7231, 7232, 7234, 1050, 7243, 7245, 7246, 510, 7259, 7264, 7266, 7271, 7273, 7279, 7281, 7282, 7287, 7288, 7289, 7295, 7302, 7306, 7308, 7309, 3885, 7313, 7315, 7316, 6193, 7329, 7337, 7339, 7352, 7353, 7354, 5722, 5767, 7361, 7363, 5783, 7368, 5798, 7372, 5816, 6101, 6165, 226, 7379, 7385, 7401, 5682, 7402, 7403, 7406, 5719, 7425, 7327, 7426, 5918, 7434, 7444, 7461, 7467, 7470, 7471, 6065, 7475, 7476, 7484, 7489, 7491, 7493, 6109, 7494, 4972, 7499, 7501, 7504, 6089, 5673, 7506, 7508, 7513, 7514, 7519, 7523, 7535, 7536, 7539, 7549, 7551, 7562, 6073, 1246, 7567, 7570, 7575, 7576, 7578, 6548, 7583, 7587, 7589, 7590, 6187, 6174, 5641, 6607, 7602, 7607, 7610, 7611, 7622, 7625, 7628, 6082, 7644, 7646, 1944, 7648, 7651, 7656, 7657, 7658, 7659, 7666, 7679, 5837, 7691, 7698, 7704, 7713, 7729, 7731, 7735, 7737, 7738, 7742, 7748, 7753, 7755, 7757, 7758, 7761, 7770, 7774, 7776, 7777, 7782, 7785, 7789, 7794, 7795, 7820, 7821, 7823, 7826, 7831, 7836, 7839, 7842, 1521, 7859, 7865, 7866, 7869, 7871, 7701, 7888, 7749, 7894, 7899, 7900, 7905, 7906, 7908, 7914, 7920, 7932, 7937, 7942, 7642, 7954, 7967, 7974, 7983, 7991, 8000, 8002, 8009, 8013, 8017, 7715, 8023, 8025, 8028, 6368, 8031, 8032, 8034, 8042, 8044, 8053, 6600, 8058, 8062, 8066, 8067, 8073, 6570, 8082, 8084, 8110, 8112, 8120, 8121, 8125, 8127, 7007, 8130, 8131, 8133, 8141, 8142, 8150, 8155, 8161, 8166, 8171, 8183, 8186, 8192, 8195, 8199, 8202, 8204, 8206, 8210, 8211, 8217, 8232, 8238, 8246, 8253, 8254, 8260, 8261, 8262, 8266, 8267, 8268, 8271, 8276, 8282, 8291, 8293, 8294, 8295, 8296, 8303, 8305, 8312, 6891, 8322, 8324, 8333, 8014, 8335, 8343, 8344, 8349, 8353, 8356, 8357, 8358, 8360, 6162, 8367, 8372, 8382, 8383, 6695, 8387, 8390, 8393, 8394, 8399, 8400, 8404, 8411, 8416, 8429, 8430, 8437, 8441, 8446, 8449, 8452, 8455, 8460, 8466, 8470, 8471, 6877, 8473, 6632, 8481, 8494, 8500, 8501, 8505, 8509, 8518, 8519, 8532, 8535, 8536, 8537, 8541, 8543, 8551, 8555, 8557, 8560, 8565, 8571, 8572, 8577, 8584, 8585, 8592, 8593, 8596, 8597, 8604, 8605, 8623, 8628, 8629, 8630, 8635, 8637, 8642, 8646, 8651, 8654, 8655, 4060, 8657, 8661, 8666, 8670, 8674, 8677, 8682, 8689, 8696, 8699, 8704, 8705, 8707, 8712, 8713, 8730, 8732, 8746, 8749, 8753, 8755, 8757, 8761, 8765, 8778, 8781, 8789, 8800, 8806, 8808, 8810, 8811, 8815, 8826, 8827, 7070, 8831, 8837, 8838, 8839, 8840, 8841, 8846, 8850, 8857, 8867, 8868, 8869, 8886, 8887, 8900, 8903, 8904, 8919, 8922, 8924, 8925, 8928, 8935, 8940, 8942, 8949, 8950, 8952, 8958, 8963, 8966, 8979, 8980, 8982, 8985, 8986, 8987, 8992, 8999, 9007, 9008, 9011, 9014, 9023, 9026, 9029, 9030, 9037, 9038, 9041, 9042, 9045, 9061, 9073, 9082, 9089, 9090, 9095, 9097, 9105, 9110, 9118, 9121, 3106, 9139, 9146, 9150, 9151, 9159, 9160, 9162, 9168, 9171, 2638, 9189, 9193, 9195, 5101, 9199, 9204, 9210, 9211, 9212, 9215, 9218, 9219, 9220, 9221, 9229, 9231, 9253, 9262, 9272, 9273, 9284, 9304, 9311, 9317, 9319, 9322, 9324, 9330, 9331, 9334, 9335, 9337, 9341, 9342, 9344, 9348, 9370, 9382, 9390, 9394, 9398, 9400, 9420, 9421, 9425, 9426, 9429, 9436, 9437, 9439, 9449, 9467, 9468, 9472, 9475, 9476, 9480, 9486, 9487, 9490, 9496, 9498, 9510, 9513, 9521, 6145, 9538, 9540, 9544, 9545, 9551, 6094, 9556, 9557, 9561, 9562, 6039, 9582, 9587, 9589, 9591, 9600, 9608, 9609, 9610, 9616, 9621, 9627, 9635, 1817, 9638, 9641, 9642, 9645, 9649, 9650, 9653, 9656, 9657, 9664, 9673, 9679, 9684, 9693, 9694, 9704, 9711, 9719, 9722, 9731, 9742, 9743, 9745, 6178, 7517, 9756, 9758, 9763, 9764, 9766, 9773, 7643, 9778, 9782, 9785, 9786, 9791, 9796, 9797, 9798, 9799, 9803, 9806, 9809, 9811, 9813, 9814, 9815, 9816, 9819, 9820, 6076, 9833, 9835, 9840, 9842, 9843, 9844, 9849, 9850, 9855, 9857, 9858, 9860, 9868, 9871, 9880, 9882, 9883, 9890, 9902, 9908, 9914, 9916, 9918, 9919, 9921, 9930, 9934, 9935, 9946, 9950, 9958, 9962, 9964, 9966, 9967, 9976, 9986, 9987, 9991, 9995, 9997, 9998, 10010, 10028, 10034, 10041, 10043, 10045, 10048, 10053, 2113, 10058, 10060, 10071, 10075, 10082, 10088, 10089, 10092, 10093, 10096, 10097, 10106, 10109, 10111, 10119, 10123, 6413, 10128, 10131, 10135, 10142, 10153, 10171, 10173, 10175, 10178, 10182, 10189, 10196, 10199, 10207, 10212, 10217, 10222, 10236, 10238, 10241, 10245, 10247, 10250, 10263, 10272, 10288, 10293, 10295, 6295, 10315, 10316, 10320, 10324, 10328, 10332, 10338, 10343, 10351, 10354, 10358, 10362, 10365, 10380, 10385, 10392, 10397, 10407, 10408, 10415, 10416, 10422, 10423, 10426, 10432, 10436, 10439, 10440, 10441, 10445, 10450, 10453, 10455, 10460, 10461, 10462, 10463, 10471, 10472, 10477, 10478, 10483, 10485, 10486, 10488, 10489, 10492, 10498, 10500, 10502, 10514, 10519, 10520, 10539, 10540, 10541, 10545, 10552, 10563, 10564, 10573, 10579, 10588, 10591, 10596, 10602, 10614, 10616, 10620, 10623, 10645, 10648, 10657, 10676, 10678, 10683, 10685, 10696, 10697, 10700, 10704, 10705, 10711, 10722, 10727, 10730, 10731, 10732, 10734, 10735, 10737, 10739, 10743, 10749, 10754, 10759, 10761, 10764, 10772, 10778, 10782, 10790, 10797, 10805, 10807, 10809, 10813, 10829, 10831, 10832, 10834, 10835, 10837, 10839, 10845, 10846, 10847, 10851, 10852, 10859, 10876, 10881, 10886, 10897, 10903, 10913, 10916, 10917, 10923, 10932, 10942, 10947, 10963, 10965, 10968, 10972, 10982, 10985, 10998, 11006, 11014, 11015, 11018, 11021, 11029, 11030, 11038, 11040, 11044, 11045, 11056, 11059, 11060, 11066, 11070, 11073, 11074, 11078, 1222, 11089, 11095, 11101, 11102, 11123, 11130, 11138, 11141, 11150, 11152, 11154, 11162, 11169, 11172, 11177, 11179, 11180, 11181, 11189, 11194, 11195, 11204, 11207, 11212, 11213, 11216, 11224, 11225, 11228, 11229, 11237, 11238, 11251, 11254, 11261, 11266, 11270, 11278, 11285, 11286, 11290, 11298, 11300, 11301, 11308, 11309, 11314, 11316, 11324, 11326, 11330, 11333, 11334, 11335, 11337, 11351, 11357, 11358, 11359, 11360, 9508, 6616, 11373, 11376, 11381, 6987, 11384, 11386, 11392, 11399, 11411, 11416, 11417, 11418, 11421, 11433, 11446, 11447, 11449, 11450, 11453, 11459, 11468, 11471, 11474, 11481, 11483, 11484, 11485, 11487, 11488, 11492, 11499, 11502, 11503, 6471, 11512, 11516, 11520, 11541, 11543, 11551, 11553, 11555, 11557, 11561, 11573, 11574, 11580, 11582, 11583, 11594, 11597, 11598, 11606, 11618, 11625, 11626, 9524, 11634, 11652, 11667, 11674, 11619, 11682, 11684, 11697, 11700, 11702, 11703, 11707, 11710, 11711, 11718, 11721, 11722, 11724, 11726, 11728, 11732, 11733, 11740, 11748, 11753, 11760, 11766, 11773, 11779, 11783, 11787, 11792, 11802, 11811, 11815, 11821, 11823, 9109, 11831, 11833, 11834, 11838, 11841, 11848, 3737, 11855, 11856, 11859, 11864, 11866, 11883, 11887, 11896, 11898, 11903, 11905, 11907, 11910, 4805, 11925, 11935, 11950, 11952, 11953, 11960, 11967, 11969, 11970, 12002, 12005, 12007, 12010, 12011, 12014, 12022, 12024, 12025, 12027, 1074, 12039, 12043, 11822, 4914, 12050, 12054, 12059, 12061, 12069, 12082, 12084, 12087, 12092, 12093, 2806, 12101, 12106, 3265, 12116, 12121, 12125, 12127, 12129, 12139, 12140, 12141, 12142, 1529, 4054, 12156, 12159, 12160, 12161, 12162, 12166, 12178, 8812, 12180, 12183, 12184, 12192, 12196, 12197, 12200, 12202, 12207, 12211, 7144, 12215, 12218, 12223, 2854, 12237, 12240, 12262, 12266, 12272, 12276, 12279, 798, 12286, 12288, 12290, 12292, 12293, 12, 12296, 12298, 12130, 12303, 12304, 12312, 7192, 12322, 12324, 12328, 12335, 12336, 12339, 12340, 12345, 12314, 12347, 12360, 12369, 12370, 12373, 12378, 12380, 12381, 12384, 12386, 12394, 12403, 12407, 12411, 12416, 12424, 12430, 12437, 12440, 12446, 12454, 12462, 12464, 9230, 12095, 12469, 12470, 12478, 5105, 12480, 12481, 12483, 12487, 12489, 1659, 12491, 12494, 12503, 12510, 12513, 12515, 12523, 12527, 12532, 12538, 12550, 12552, 12554, 12559, 12563, 12565, 12566, 12571, 12579, 12586, 12589, 12591, 12597, 12608, 12622, 12624, 12630, 12632, 12636, 12641, 12644, 12645, 12650, 12652, 12659, 12667, 12670, 12673, 12676, 12681, 12686, 12696, 12697, 5086, 4444, 12700, 12705, 12712, 12723, 12730, 12739, 12740, 12749, 12751, 12762, 12764, 12765, 12767, 12768, 12772, 12774, 12777, 12779, 12788, 12792, 12794, 12796, 12799, 12803, 12808, 12821, 12826, 12828, 12829, 12839, 12842, 12843, 12845, 12846, 12849, 12860, 5132, 12867, 12217, 12878, 12896, 12906, 12912, 12920, 12927, 12928, 12932, 12933, 12939, 12944, 12951, 12952, 12953, 12959, 12964, 12968, 12971, 12976, 12199, 12982, 12993, 12998, 13006, 13007, 13008, 13009, 13012, 13014, 13017, 13019, 8274, 13021, 13023, 13033, 13034, 13035, 13038, 13040, 13042, 13044, 13046, 13048, 13056, 13062, 13063, 12400, 13071, 13074, 13075, 13078, 13079, 13083, 3338, 13091, 13094, 13097, 13099, 13122, 13128, 13138, 13142, 13147, 13153, 13156, 3544, 13162, 13168, 13169, 13172, 13176, 13177, 13179, 13184, 13188, 13189, 13192, 13198, 13215, 13218, 13219, 13221, 7263, 13247, 13256, 13271, 13274, 13278, 13282, 13297, 13313, 13315, 13316, 13320, 13322, 13324, 13325, 13327, 13328, 13338, 13342, 13352, 13353, 13359, 13362, 13369, 13372, 13378, 13390, 13393, 13394, 13395, 13396, 13402, 13406, 13407, 13408, 7233, 13409, 13411, 13413, 13423, 13430, 13433, 13436, 13447, 13453, 13456, 13462, 13465, 13466, 13467, 13475, 13477, 13482, 5038, 13492, 13504, 13506, 13509, 13054, 13520, 13523, 13526, 13527, 13530, 13532, 13533, 13538, 13540, 4137, 13545, 13556, 13557, 13558, 3307, 13566, 13567, 13571, 13586, 13591, 13593, 13609, 7130, 13620, 13623, 13632, 13637, 13648, 13649, 13657, 13659, 13662, 13665, 13668, 13670, 13676, 13694, 13699, 10, 13702, 13707, 13708, 2927, 13720, 13732, 13737, 7138, 13745, 13748, 13749, 13769, 13770, 3022, 13780, 5668, 13791, 13794, 13795, 13797, 13799, 13806, 13810, 13813, 2698, 4261, 23, 13822, 13823, 13839, 13851, 13852, 13856, 13859, 13871, 13872, 13874, 13875, 13878, 13883, 13887, 13889, 13890, 13899, 13900, 5752, 13901, 13906, 13907, 13909, 13911, 13915, 13916, 13926, 13928, 13931, 13933, 13938, 13939, 13940, 13945, 13952, 13957, 13961, 13970, 13973, 13974, 13977, 13981, 13984, 13987, 14002, 14004, 6090, 14010, 14015, 14022, 14025, 14030, 14031, 14036, 14039, 14040, 14041, 14043, 14048, 14050, 14062, 14063, 14068, 2694, 14077, 14081, 14089, 14096, 14100, 14105, 14118, 14123, 14125, 14131, 14137, 14138, 14141, 11863, 14142, 14149, 19, 14161, 5688, 14165, 14167, 14173, 14182, 14185, 12169, 14188, 7189, 14202, 14205, 14206, 14213, 14220, 14221, 14222, 14223, 14224, 14229, 14231, 14234, 14235, 7516, 14248, 3988, 14262, 14266, 14270, 14285, 14297, 14306, 14307, 14310, 14316, 14319, 14321, 14325, 14330, 14335, 14336, 14344, 3369, 14362, 14364, 14366, 14367, 14371, 14376, 14380, 14387, 14397, 940, 14416, 14417, 14419, 14423, 14430, 14431, 14433, 14443, 14446, 14454, 14455, 14457, 14461, 14462, 14469, 12147, 5114, 14490, 14498, 14500, 14503, 14505, 14508, 14514, 14515, 14525, 6126, 14533, 14544, 14547, 14548, 14563, 14565, 14566, 14569, 14571, 14576, 14578, 14580, 14582, 14591, 14606, 14607, 14610, 14612, 14613, 14619, 14621, 14626, 14634, 2211, 14649, 14650, 14652, 14655, 2462, 14666, 14668, 14669, 14671, 14675, 14677, 14683, 14696, 14699, 14707, 14710, 14260, 14711, 5642, 14715, 14728, 14738, 14739, 14743, 3297, 14749, 14750, 14753, 14760, 14762, 14769, 14784, 14787, 14789, 14799, 14802, 14804, 14805, 6342, 14808, 13144, 14812, 14816, 14817, 14820, 9246, 14825, 14830, 14831, 14836, 14842, 13207, 14858, 14862, 14874, 14876, 14877, 14879, 14882, 14889, 14896, 13442, 14897, 14901, 14902, 14909, 14911, 5862, 14925, 14930, 14940, 14943, 14949, 14955, 14956, 1650, 14971, 14973, 14977, 14987, 14988, 14990, 15001, 15003, 15005, 15008, 15013, 15017, 15018, 15020, 15028, 15033, 15034, 15043, 15053, 15055, 15058, 15062, 15075, 15081, 15086, 15096, 15105, 15116, 15118, 15120, 15121, 15133, 7414, 15148, 15152, 15157, 15163, 15164, 15167, 4895, 15176, 15177, 15182, 15184, 5553, 15196, 15205, 15226, 15227, 15234, 15247, 15248, 15250, 15256, 15257, 15259, 1620, 15269, 15271, 5602, 15274, 3972, 15283, 15289, 15298, 15301, 15306, 15307, 15311, 15312, 15313, 15324, 15325, 15331, 15333, 15341, 15343, 15355, 15366, 15367, 15376, 15378, 5928, 6124, 15382, 15384, 15386, 15389, 15390, 15392, 15400, 5661, 15404, 1342, 2874, 15418, 15419, 15424, 591, 15437, 15440, 6709, 15447, 15451, 1622, 15465, 15468, 15472, 15480, 15481, 15486, 15487, 15488, 15492, 6037, 9573, 15497, 15504, 15508, 15509, 9567, 15513, 15520, 15524, 9584, 1854, 15534, 15538, 15539, 15540, 15544, 15547, 15554, 15557, 15565, 6288, 15573, 15574, 15576, 6138, 12305, 15579, 1885, 1388, 15590, 10658, 6484, 15605, 15610, 15611, 15613, 15614, 15615, 3244, 15626, 15627, 15635, 15639, 15653, 15655, 15656, 15658, 15659, 15542, 15668, 15669, 15686, 15699, 15701, 15702, 15710, 15713, 15715, 15720, 15722, 15730, 15735, 15736, 15743, 15745, 9936, 15763, 15776, 15778, 15780, 8308, 15788, 15796, 15797, 15799, 8991, 15816, 15817, 15821, 15823, 1894, 15830, 15832, 15833, 15836, 5774, 15857, 15861, 885, 15863, 15867, 15872, 15877, 2243, 15884, 15885, 15890, 15905, 15906, 15909, 5395, 15920, 15923, 15932, 15935, 15937, 15941, 15942, 15945, 15951, 15953, 15972, 6259, 2157, 15987, 15999, 2333, 16002, 16005, 16010, 16013, 16014, 16015, 16016, 16024, 16028, 16037, 16040, 16046, 16062, 16064, 16070, 16075, 6189, 16080, 16082, 16106, 16110, 16113, 16115, 16122, 16123, 16127, 16146, 16157, 16166, 15995, 16173, 16174, 16177, 16178, 16179, 9963, 16183, 16186, 16191, 16194, 16199, 16205, 16216, 16221, 16225, 16234, 16235, 16239, 16246, 16259, 16261, 16279, 16285, 16288, 16292, 16293, 16300, 16302, 16314, 16316, 16333, 16336, 16338, 16348, 16355, 16356, 16369, 16370, 16371, 16379, 16382, 16383, 16384, 16390, 16394, 16398, 16399, 16405, 16407, 16408, 16410, 16412, 16413, 16415, 16420, 16431, 16438, 16447, 16453, 16454, 16455, 16457, 16460, 16462, 16464, 16466, 16468, 16469, 16473, 16475, 16476, 16477, 16482, 16483, 16486, 16489, 16490, 16491, 16505, 2288, 16509, 16210, 16522, 16533, 16541, 16543, 16545, 16546, 16549, 16555, 16560, 16564, 16566, 16568, 16570, 16571, 16583, 16596, 16598, 16608, 16610, 16611, 16614, 16620, 16624, 16626, 16629, 16631, 16637, 16650, 16652, 16654, 16670, 16677, 16681, 16682, 16703, 16707, 16708, 16715, 16720, 16731, 16761, 16762, 16769, 16772, 16778, 16779, 16780, 16782, 16798, 16809, 16814, 16818, 16820, 16822, 16832, 16837, 16842, 16848, 16850, 16852, 16859, 16880, 16883, 16885, 16889, 16891, 16906, 2237, 16913, 16050, 16917, 16930, 16932, 16934, 16947, 7011, 16645, 16953, 16957, 16963, 16972, 13767, 16977, 891, 1292, 16985, 16986, 16987, 16990, 16994, 5631, 13893, 5607, 5677, 17011, 5755, 17015, 17017, 17019, 17020, 14497, 5738, 5785, 5790, 5784, 17031, 17032, 5811, 17034, 17036, 5786, 17039, 5819, 17042, 1255, 17048, 14950, 17052, 17053, 17054, 17056, 7674, 17057, 17060, 14764, 17064, 17070, 5814, 17086, 17088, 17089, 17091, 15254, 6154, 17101, 5789, 17110, 5793, 7568, 17115, 17122, 5893, 6026, 17130, 6318, 17132, 17133, 17134, 1670, 17136, 17137, 11211, 7565, 15838, 17154, 17156, 17162, 6590, 17169, 6866, 6373, 6596, 17175, 6567, 6582, 17180, 1851, 6859, 17189, 8363, 3974, 17211, 8003, 8338, 17214, 17215, 8527, 8389, 8398, 17224, 8448, 8491, 17235, 8377, 17240, 7725, 17245, 17249, 17255, 17261, 17270, 8724, 15671, 17281, 17282, 13611, 13684, 13777, 17283, 14317, 14620, 14657, 17292, 17293, 13923, 17295, 13892, 17302, 17303, 2978, 14444, 13831, 13951, 15101, 16982, 17320, 15190, 7857, 17323, 15264, 13828, 1876, 13922, 17341, 17342, 5580, 17355, 17367, 17369, 17373, 17387, 17389, 17391, 17394, 15201, 5904, 17407, 13802, 17410, 17411, 17416, 17417, 17421, 17425, 17427, 1125, 17435, 15025, 17437, 17440, 17441, 17442, 17444, 17446, 17447, 17454, 17455, 1964, 15218, 17465, 17466, 17469, 17472, 17476, 1126, 13819, 17486, 8580, 17487, 17494, 5578, 17496, 17503, 17504, 824, 17522, 17524, 16999, 17537, 6491, 17538, 17541, 17547, 17549, 17550, 17552, 17558, 17564, 7348, 17573, 13798, 17094, 17581, 17582, 17583, 17594, 14084, 17597, 17598, 17599, 17600, 17603, 17079, 17606, 17610, 17612, 17613, 17615, 17624, 17625, 15237, 17628, 15166, 15160, 17631, 17635, 15543, 17642, 17645, 17648, 17650, 17663, 17666, 7530, 17669, 17670, 17685, 17687, 17692, 17700, 17701, 17703, 17705, 17728, 17732, 17734, 15175, 17747, 17752, 17753, 17761, 17762, 17764, 17769, 17786, 6504, 17006, 17799, 14528, 17803, 14546, 2304, 13604, 5780, 17812, 17813, 17823, 17826, 17836, 17848, 17857, 199, 17869, 17882, 17883, 17885, 17886, 17888, 17890, 17892, 17896, 5629, 17916, 17929, 17930, 14766, 17938, 17939, 17948, 17957, 15280, 17966, 17969, 17972, 17976, 7557, 7603, 13975, 17988, 17018, 17041, 7558, 17999, 18003, 18011, 18015, 18016, 18021, 17024, 18032, 18034, 18042, 18051, 18057, 18058, 18059, 18060, 18066, 18075, 18081, 18084, 18090, 18091, 18094, 18097, 18104, 18109, 18118, 18123, 18127, 14594, 18136, 5763, 14542, 18140, 18150, 18154, 18155, 18156, 18160, 18163, 18173, 18175, 15232, 18182, 5615, 18186, 18190, 18200, 18202, 14706, 18221, 18223, 18228, 18235, 18237, 18242, 18246, 5795, 18253, 18254, 18255, 18257, 18258, 18259, 18269, 18273, 18278, 18287, 18290, 18291, 18295, 17177, 18300, 18302, 18303, 13807, 18306, 18315, 18322, 18327, 18335, 18340, 18350, 18356, 18357, 9724, 18363, 18364, 13959, 18370, 18373, 18377, 18381, 18383, 3242, 18384, 2834, 18392, 18393, 18394, 14044, 15583, 18403, 18404, 18409, 13988, 17029, 18419, 18420, 18425, 18429, 18430, 18433, 18438, 18439, 18443, 18453, 18454, 18461, 18465, 18466, 15427, 18470, 18471, 14534, 7362, 18490, 18491, 18492, 18493, 18506, 13983, 18509, 14088, 6683, 7334, 18514, 13910, 18517, 2853, 18528, 18529, 18538, 18540, 18544, 18546, 14395, 18562, 18568, 18569, 17117, 18574, 18579, 18580, 18589, 18591, 18592, 18595, 18597, 18602, 18603, 18608, 18610, 18622, 18624, 18629, 18631, 18634, 18636, 18642, 18653, 12795, 6569, 18671, 18674, 18676, 14071, 18679, 18680, 18683, 18688, 18689, 18696, 18700, 18709, 18710, 18713, 18726, 18730, 18731, 18739, 1901, 18747, 18748, 18752, 18753, 17038, 18759, 18765, 18781, 16993, 18800, 2855, 18804, 18805, 18812, 18813, 18819, 18821, 18824, 896, 18830, 18831, 18836, 15349, 18844, 18848, 18853, 7405, 18862, 18867, 18868, 5876, 18882, 18895, 18896, 18903, 18907, 2336, 18913, 18915, 18922, 18927, 1598, 6022, 15145, 18939, 18950, 7717, 1911, 18974, 18979, 18980, 18982, 7371, 13619, 18990, 1588, 18996, 18997, 19004, 14906, 19005, 19006, 19008, 19009, 19010, 19014, 13577, 19022, 19023, 14689, 19025, 13561, 19028, 17338, 19037, 19038, 19040, 19047, 19051, 19057, 13641, 19059, 19066, 19069, 19070, 19073, 5437, 19076, 19079, 19080, 19091, 19093, 14147, 19098, 19105, 19120, 17350, 19128, 19132, 19133, 19134, 19142, 19147, 19150, 17414, 12354, 19160, 17696, 19166, 19168, 19169, 17804, 15129, 19173, 17392, 14140, 19180, 19182, 13607, 19191, 13733, 13722, 821, 19194, 19195, 19197, 19199, 19202, 13713, 17793, 19212, 19213, 17452, 19215, 19220, 19223, 14168, 19231, 19233, 19235, 18835, 19241, 19245, 19247, 15179, 19250, 19259, 3838, 19264, 14156, 19273, 19274, 19285, 17678, 19286, 15174, 17795, 19288, 19291, 19292, 19293, 17363, 14537, 15228, 19300, 19302, 19307, 19309, 19310, 19314, 17593, 19320, 19322, 19331, 19336, 13846, 19339, 14378, 19346, 19351, 19353, 17571, 17602, 15243, 19359, 19365, 7511, 14511, 17536, 19385, 19387, 19388, 13764, 19393, 13752, 19395, 18925, 19398, 5782, 17853, 18385, 13808, 17992, 18716, 17181, 19424, 19428, 5690, 19443, 19444, 19445, 13672, 18416, 6920, 17646, 19451, 19452, 19454, 17641, 19456, 19458, 19469, 19471, 17580, 19476, 7598, 19481, 19482, 17933, 19486, 14315, 19490, 12143, 13861, 17791, 19498, 18125, 19502, 19506, 19508, 18044, 13998, 19517, 5636, 17773, 19529, 19530, 19532, 17556, 19534, 19535, 19538, 19539, 19541, 18552, 18197, 14540, 19555, 19558, 13789, 19561, 14308, 17815, 13904, 19570, 19571, 19574, 7515, 19577, 19578, 19597, 14496, 19598, 15531, 19609, 19614, 7330, 19620, 19621, 19623, 18494, 19634, 19636, 19637, 7901, 5762, 19638, 17749, 19646, 18354, 19649, 19651, 18548, 6134, 17722, 12158, 19662, 17713, 19682, 17196, 19686, 13979, 19693, 19695, 19696, 19703, 19704, 19706, 18655, 19712, 17539, 19719, 12613, 6903, 16992, 19728, 17912, 19734, 19740, 18611, 19757, 19758, 15525, 19768, 19773, 19779, 17740, 19780, 14477, 7563, 19787, 19788, 14539, 19792, 628, 19796, 18199, 19799, 17841, 13936, 14027, 19805, 14495, 19806, 19807, 14541, 19817, 19819, 19823, 19832, 19834, 3993, 19838, 19842, 19844, 19845, 17333, 19852, 19854, 19855, 18181, 19865, 14601, 19871, 8706, 17856, 19877, 17967, 19878, 5262, 18555, 18348, 17340, 18191, 19892, 19897, 19898, 17755, 19899, 19900, 14148, 19909, 19911, 19912, 19914, 19922, 19925, 17233, 19929, 19934, 19935, 19943, 19954, 17961, 17216, 14518, 19965, 14006, 19969, 14024, 19974, 14603, 6594, 15245, 6072, 18365, 19987, 19988, 19989, 20000, 18117, 20020, 20025, 20026, 20027, 20032, 20034, 20040, 20042, 20046, 20048, 20049, 20050, 20055, 20058, 8205, 20062, 20067, 20077, 18297, 18035, 20080, 20082, 14033, 20088, 20089, 20092, 20102, 18229, 17854, 20110, 5333, 20117, 20119, 12853, 7364, 20128, 20130, 20132, 20133, 20155, 20156, 20157, 20161, 14013, 20163, 859, 20166, 18073, 20168, 20171, 20176, 20178, 20179, 20189, 20190, 20191, 20193, 2674, 20194, 20195, 20204, 18064, 18633, 20210, 20219, 20220, 20227, 13996, 20229, 14061, 18988, 20248, 12863, 20254, 20255, 20256, 20258, 5768, 20263, 20267, 18457, 20270, 20272, 14589, 20273, 18790, 18469, 20293, 20294, 20298, 5335, 18773, 20307, 20310, 20320, 20321, 20329, 20340, 20344, 14052, 20349, 18744, 18738, 20356, 20358, 20360, 20361, 14587, 3267, 20365, 20366, 20373, 20392, 1262, 20401, 20402, 14087, 7634, 20407, 20408, 14645, 18588, 20417, 15572, 943, 20421, 20423, 18079, 20429, 20430, 20431, 20434, 4082, 18366, 20438, 18476, 20442, 18411, 14653, 18379, 18069, 20456, 20465, 17068, 20473, 20474, 18823, 20482, 14126, 20486, 20488, 20493, 20494, 20495, 20499, 20501, 20515, 11712, 13774, 17868, 20533, 20540, 6002, 20548, 20549, 18876, 20555, 20561, 20562, 20564, 20565, 20566, 20567, 20584, 20586, 20587, 20603, 20606, 20615, 20617, 20624, 20629, 20639, 20641, 224, 20650, 20651, 20652, 20657, 20658, 20659, 20660, 20662, 5805, 20674, 20680, 20689, 545, 20690, 20692, 20696, 20700, 20706, 20711, 20717, 20720, 6805, 20724, 20744, 20747, 20753, 20767, 20768, 6324, 20779, 20780, 20785, 20786, 20787, 15586, 20789, 20790, 20792, 20796, 20806, 20809, 20810, 20813, 20816, 20819, 20821, 20827, 20828, 20830, 20835, 20837, 20842, 20845, 20849, 13080, 10221, 20855, 20857, 20865, 20867, 20868, 20869, 20871, 20874, 16171, 20886, 20895, 262, 20898, 20907, 20909, 20912, 20926, 20928, 20930, 20934, 6544, 20939, 20944, 20949, 20801, 20951, 20953, 20956, 20959, 20966, 20977, 20992, 2179, 21007, 21014, 16452, 21023, 21029, 21040, 21044, 21050, 21057, 21060, 21061, 21068, 8306, 21083, 21093, 21095, 21097, 21102, 21106, 21109, 21121, 7020, 21124, 21127, 21133, 21135, 21137, 21143, 21145, 21147, 21166, 21176, 21181, 21186, 21187, 6826, 21189, 21196, 21199, 21212, 21214, 21222, 8528, 21226, 6164, 21228, 21233, 21236, 21240, 21241, 21242, 21246, 21248, 21253, 21256, 21261, 21263, 21267, 21269, 21272, 21277, 21278, 21289, 21292, 21298, 21300, 17250, 21306, 21309, 21311, 21322, 21326, 17247, 21336, 21355, 21356, 21357, 21363, 21379, 21391, 21396, 21399, 21403, 21414, 21416, 21423, 21424, 21426, 21428, 21429, 21434, 21441, 21445, 21450, 21452, 21458, 21459, 1644, 21464, 21471, 21474, 21475, 21479, 21481, 21490, 21495, 21500, 21512, 21517, 21519, 5577, 21520, 8948, 21538, 13866, 21556, 21557, 21558, 21559, 21565, 21566, 21572, 21590, 21591, 21592, 21594, 21597, 19104, 21607, 21609, 11893, 14991, 21615, 11704, 21578, 21624, 21636, 13765, 19045, 9372, 13784, 21653, 2395, 21658, 21662, 19136, 21667, 21672, 17304, 19340, 21681, 21682, 21687, 21689, 21690, 6030, 21697, 21701, 13775, 21722, 19236, 17616, 4006, 21728, 21730, 19389, 21735, 13709, 9059, 21739, 21743, 21744, 21746, 19205, 6553, 21757, 19653, 19370, 21767, 21769, 13873, 18886, 18002, 21779, 17879, 14291, 12030, 19956, 21789, 17604, 21796, 19516, 21798, 21799, 7486, 20131, 19298, 19392, 19580, 21808, 14468, 13693, 21815, 21819, 21821, 21823, 18932, 21824, 19556, 21829, 2494, 21834, 13236, 21835, 19493, 21840, 17595, 21843, 21844, 21850, 21852, 21857, 21859, 19434, 17894, 6588, 19391, 21861, 21864, 21866, 2397, 21873, 6095, 14559, 14377, 18141, 21876, 3485, 21878, 21879, 21880, 21884, 1557, 14408, 21889, 21890, 21892, 21894, 21895, 19484, 20215, 19567, 21903, 4928, 8998, 13703, 13919, 17964, 18010, 5597, 20065, 13954, 19566, 18497, 21925, 19585, 17098, 21928, 14000, 19810, 14445, 20203, 19732, 20056, 21934, 13963, 15170, 13891, 13942, 19697, 21937, 13971, 21939, 21941, 14487, 21945, 17037, 20221, 21946, 14633, 17025, 20205, 7553, 5791, 21961, 21963, 21964, 14008, 19736, 19221, 14552, 17757, 19853, 1205, 5558, 17348, 17182, 18663, 19944, 17711, 18045, 19970, 5826, 14095, 13930, 17675, 13876, 18719, 20200, 20266, 21981, 21982, 18542, 18293, 21983, 15263, 18799, 20410, 21987, 14440, 18785, 21994, 18599, 19720, 18645, 20277, 22002, 7635, 22003, 14604, 22007, 899, 22013, 22014, 14320, 22024, 22029, 22034, 22036, 22042, 22046, 22055, 22058, 22060, 22066, 22073, 14164, 4905, 22081, 22082, 20552, 22094, 22095, 22100, 22107, 22110, 6067, 6148, 22113, 22114, 5851, 811, 12283, 22125, 22126, 22131, 14055, 22134, 305, 22136, 22139, 12357, 7161, 22142, 4899, 3177, 6061, 20376, 265, 22160, 22162, 22167, 3466, 22183, 22185, 22186, 22187, 22193, 5476, 1175, 22197, 22202, 22205, 22206, 22209, 22212, 5550, 1469, 22213, 881, 22218, 22221, 22227, 22229, 22231, 22233, 22234, 22236, 22243, 22244, 22250, 1652, 22253, 4565, 22266, 22268, 22273, 22274, 22277, 22278, 22279, 7347, 1745, 22285, 22293, 5967, 22295, 1199, 22303, 18285, 22310, 5753, 22321, 22326, 22328, 22331, 22332, 7627, 22334, 22338, 22339, 22344, 22346, 22347, 22348, 22350, 22351, 22360, 22364, 22368, 22375, 22380, 22381, 1144, 22397, 22398, 22400, 22401, 22403, 22404, 22405, 22411, 22416, 15457, 22430, 22439, 22441, 22443, 22451, 22454, 22458, 22461, 22462, 22467, 22472, 22477, 1084, 22485, 22296, 22490, 22492, 22493, 22498, 22500, 22503, 22505, 22388, 22510, 22512, 22520, 22522, 22523, 22525, 22534, 7487, 22536, 22550, 22570, 22577, 22582, 22586, 22589, 22590, 22591, 22594, 22596, 6168, 22601, 22605, 22608, 22611, 22617, 22627, 16056, 7158, 6058, 22638, 22639, 22641, 22642, 5804, 2392, 22656, 22660, 18991, 22664, 22669, 22670, 22673, 17106, 1872, 1914, 1878, 22690, 22691, 1312, 22700, 22704, 22706, 22707, 22714, 22720, 22726, 22728, 22732, 22740, 22741, 22742, 20734, 10371, 22747, 22751, 22753, 22759, 22760, 22764, 22768, 22774, 22782, 22783, 22785, 22794, 22800, 22808, 22823, 22830, 22832, 22833, 22835, 22847, 22849, 22852, 22858, 22859, 22864, 22867, 22873, 2503, 13583, 21555, 22882, 22883, 22892, 4778, 22896, 22897, 22902, 5635, 22909, 22917, 22919, 22921, 22925, 22926, 22930, 22931, 22934, 22937, 11668, 22950, 22953, 19742, 7520, 19077, 22965, 22966, 22976, 22979, 19525, 2521, 22995, 13683, 19367, 14979, 23000, 23001, 11923, 23009, 23010, 13674, 23017, 11659, 23020, 23028, 23034, 23040, 23041, 23043, 23046, 13697, 23049, 23052, 23053, 23057, 23062, 14122, 12085, 23063, 23064, 23068, 19726, 23070, 14473, 13565, 15213, 23080, 23082, 23085, 13715, 19167, 23095, 17337, 23100, 23101, 17418, 23105, 5292, 23111, 23112, 23113, 23118, 23119, 23121, 13751, 19290, 23134, 23137, 5650, 13678, 23145, 19289, 23150, 19186, 23157, 10235, 23162, 23166, 21822, 23171, 13750, 23176, 17544, 14018, 23184, 23185, 23186, 23188, 19522, 23194, 17677, 5807, 17535, 13877, 23213, 19449, 23218, 23224, 17531, 23228, 17710, 8832, 20098, 23238, 21841, 15233, 23241, 23243, 23244, 18685, 23250, 23253, 14441, 23256, 19294, 19655, 15119, 23262, 23263, 23265, 23269, 14346, 15253, 23278, 23279, 23285, 23290, 23292, 14410, 19611, 23296, 19267, 15069, 23299, 23301, 23304, 23312, 19419, 23316, 6941, 21924, 23317, 23319, 13854, 15405, 23331, 19993, 18371, 17985, 19405, 23339, 23342, 23347, 14550, 19781, 19642, 18007, 23360, 23378, 23379, 23382, 19256, 19795, 23390, 19652, 18320, 7358, 17725, 23394, 21921, 19582, 14637, 23396, 23398, 14568, 19675, 19617, 17372, 17542, 17688, 20251, 14512, 18618, 14643, 23406, 23407, 13969, 14815, 23411, 18558, 19801, 21958, 14641, 20197, 23415, 17343, 18473, 19624, 19997, 20196, 20121, 21984, 20268, 14532, 21943, 20135, 3001, 23422, 7509, 19890, 21999, 5818, 23426, 18203, 14069, 23429, 23431, 18312, 17517, 21956, 18426, 19650, 18231, 21606, 14516, 20103, 14630, 14078, 21974, 23447, 20444, 14011, 20395, 6704, 14093, 20319, 18286, 5284, 23454, 23464, 23470, 5770, 2248, 18612, 23485, 23496, 1826, 23500, 5976, 546, 5535, 1226, 23508, 23509, 23512, 23515, 23524, 23525, 23527, 18501, 17962, 23531, 23533, 23534, 23535, 23536, 23537, 23544, 5588, 23549, 23550, 11322, 21526, 23554, 23555, 23556, 23558, 23561, 2215, 23568, 23569, 23574, 23575, 5998, 23577, 5966, 23593, 6285, 6499, 23602, 23604, 23609, 10769, 23613, 6163, 1306, 23617, 23619, 23621, 23622, 23629, 23631, 23632, 2238, 18165, 2163, 23637, 1997, 2225, 23644, 2222, 6898, 23651, 23653, 23657, 23659, 23662, 7039, 23666, 23668, 23670, 2204, 23679, 23680, 23681, 23682, 23691, 23693, 17234, 6829, 23697, 23700, 23705, 23712, 6971, 6832, 23719, 23726, 23727, 6980, 23733, 23734, 23736, 23737, 8380, 23745, 23748, 23755, 6907, 13729, 23764, 23765, 23766, 23771, 14059, 14016, 23774, 23775, 14042, 13991, 23781, 14592, 14658, 23786, 14239, 14197, 14590, 13953, 14574, 14085, 13964, 14060, 14648, 14199, 17319, 15199, 23792, 23794, 13978, 18621, 23795, 15246, 14086, 15275, 17378, 17370, 22262, 17379, 17422, 7299, 23809, 15030, 23811, 14267, 17374, 23816, 17490, 7727, 4147, 15197, 18659, 17502, 17406, 4069, 23832, 18272, 17445, 23833, 18204, 18500, 17607, 17721, 10104, 17620, 17955, 17790, 23839, 17649, 20280, 5824, 23843, 2085, 17673, 19404, 17659, 23848, 18358, 23851, 17584, 17897, 20524, 17614, 14476, 17555, 23860, 5684, 23863, 23865, 17621, 7521, 23869, 23872, 23400, 17783, 17482, 19950, 18171, 17974, 23879, 17745, 17765, 23883, 2634, 18598, 18313, 17473, 23890, 18086, 23895, 19625, 23899, 18316, 18668, 17872, 23902, 17859, 20554, 23906, 19927, 23909, 18604, 23914, 5685, 5757, 23917, 23919, 18205, 23920, 6104, 18573, 18132, 23924, 18148, 18360, 23926, 23927, 23928, 19328, 23930, 23931, 18489, 17889, 23934, 23935, 18692, 18526, 14502, 17802, 5751, 23936, 22307, 18169, 18019, 18389, 18981, 23940, 18009, 18662, 5672, 18144, 23947, 14342, 19429, 18179, 18323, 18062, 5808, 14242, 18346, 23953, 17686, 18226, 17805, 18516, 18543, 18545, 23961, 23963, 23964, 14501, 14228, 18445, 18196, 18151, 17855, 7376, 18563, 5792, 18310, 18482, 18954, 23982, 23983, 17756, 18376, 18238, 17910, 17990, 17346, 17698, 23994, 18406, 19179, 24000, 7559, 19313, 17924, 17457, 18040, 24003, 19962, 24004, 18301, 20054, 18667, 18656, 18334, 24011, 24012, 24013, 18352, 24015, 18503, 17839, 18212, 18801, 18263, 7343, 24021, 18570, 24030, 18572, 24031, 24032, 18402, 18417, 18441, 18424, 18271, 18468, 18400, 18479, 24041, 14617, 18013, 18321, 24044, 18617, 18184, 18539, 18698, 18794, 18535, 17968, 17840, 18518, 17981, 24056, 18557, 8402, 24061, 17668, 18775, 17949, 20066, 24068, 18250, 19936, 17925, 18474, 18421, 18705, 18276, 24078, 24081, 18632, 18637, 18733, 18615, 15555, 14556, 18437, 18449, 17051, 18666, 13820, 18590, 18245, 24087, 18648, 18292, 18694, 18484, 18723, 24091, 18311, 17730, 18505, 18682, 18341, 18347, 14001, 18052, 18351, 24098, 24099, 19103, 18072, 18736, 17901, 18757, 14554, 18511, 18787, 18780, 24107, 24108, 24110, 21936, 18216, 2147, 24113, 18809, 24114, 24115, 18817, 18832, 18842, 24122, 24123, 18908, 18822, 22076, 17497, 18883, 6382, 18849, 24131, 18897, 18888, 24136, 18904, 18921, 14250, 19396, 24143, 972, 7540, 24145, 8554, 18942, 14465, 18900, 18978, 24162, 17866, 24167, 24168, 24169, 18857, 24174, 20147, 24187, 18878, 24193, 24194, 18935, 24200, 6861, 24205, 24206, 24212, 24213, 18992, 24215, 24220, 18985, 24226, 7427, 24237, 18976, 24239, 18279, 24249, 19171, 14506, 13850, 13935, 14504, 14494, 17739, 6156, 13921, 14615, 14479, 5651, 1861, 23448, 14289, 14287, 15286, 24259, 19607, 13993, 14488, 14483, 13962, 14575, 14555, 18643, 20239, 14489, 14651, 14709, 5357, 22078, 24137, 24192, 5593, 15047, 24273, 4249, 15146, 15220, 17475, 14486, 24276, 24277, 15117, 24280, 14492, 18658, 18554, 17464, 19940, 19882, 24285, 14519, 24287, 17817, 17936, 24257, 7370, 20397, 24294, 20479, 17433, 17636, 17376, 24299, 15019, 17316, 2228, 18833, 24302, 24307, 17560, 15188, 14253, 24311, 24313, 1119, 14225, 24321, 23819, 14801, 24322, 18299, 17078, 24323, 15159, 17242, 17579, 20383, 17428, 24333, 24334, 17574, 15041, 19402, 7473, 24340, 17601, 24342, 17781, 23893, 15242, 17965, 24348, 6054, 17633, 24352, 17519, 24353, 17543, 24354, 23517, 19494, 24362, 17971, 18243, 17674, 24371, 24372, 14472, 17523, 17377, 18095, 24375, 24377, 24378, 18111, 17820, 24382, 24386, 17831, 19861, 18380, 24389, 24390, 7593, 24394, 24042, 24395, 24396, 14723, 24401, 19043, 15070, 19101, 24407, 19086, 19127, 19067, 7407, 19163, 15023, 24419, 13717, 24421, 19172, 24423, 19509, 18851, 14175, 19175, 23205, 19135, 19119, 17470, 24431, 19201, 5556, 21781, 24442, 19232, 19420, 24443, 14379, 5723, 13895, 20522, 18627, 19955, 19277, 19060, 19425, 19304, 20150, 7342, 19225, 24450, 19355, 19497, 13863, 17647, 13888, 23237, 24457, 15217, 19960, 19369, 14251, 5778, 13814, 15195, 19200, 17906, 17596, 19586, 24461, 24466, 24467, 19565, 19559, 24470, 20127, 13896, 14020, 19495, 24487, 19640, 13905, 17878, 15212, 13778, 19496, 19372, 19913, 24489, 24492, 14510, 19730, 24495, 21801, 14517, 17774, 19591, 18029, 19800, 19034, 13982, 24505, 19563, 18458, 24513, 24112, 19860, 19762, 19514, 19639, 19547, 19880, 24518, 19483, 19457, 14598, 24523, 18113, 19661, 24524, 24525, 24527, 24530, 24532, 24534, 13966, 18031, 19700, 19648, 14475, 17702, 20129, 18527, 19520, 19818, 24550, 17300, 19694, 24559, 17837, 19702, 24562, 24565, 24570, 24571, 20125, 24575, 20285, 12855, 24581, 19436, 20162, 24588, 6183, 19629, 4936, 24595, 24596, 24601, 24606, 24607, 14543, 20187, 20235, 24612, 20445, 19870, 13920, 19581, 18502, 24613, 24616, 20509, 19843, 18742, 20165, 24623, 20097, 14097, 19599, 12862, 18152, 20347, 20413, 13976, 20404, 23770, 24646, 19883, 24647, 14012, 17013, 23769, 19095, 20253, 24658, 20144, 24660, 20091, 20295, 7630, 18762, 20339, 18472, 22652, 20391, 24671, 20353, 23782, 18650, 18587, 14625, 13947, 24679, 24682, 20259, 18693, 19729, 20269, 24688, 24690, 14618, 15258, 20449, 14600, 18428, 24695, 19798, 17861, 18262, 20183, 20024, 7373, 20301, 20043, 17849, 19963, 24701, 20260, 20238, 17460, 21997, 20372, 20367, 19718, 18099, 14521, 20108, 19999, 19992, 20403, 2748, 19886, 20388, 18260, 18707, 14646, 18498, 19990, 14642, 24713, 19125, 24714, 18275, 18153, 20462, 20475, 20481, 13701, 14705, 19526, 19113, 20523, 20483, 18866, 19939, 20508, 20502, 19888, 20546, 19813, 20538, 22108, 24726, 24731, 19187, 24734, 24735, 5897, 24742, 5669, 21949, 24748, 24749, 19829, 14249, 24753, 24755, 23414, 24255, 24253, 24765, 18078, 24767, 24130, 7849, 18993, 24772, 24776, 24778, 24782, 24784, 24785, 24788, 13997, 24791, 14281, 24794, 14279, 20104, 18966, 21955, 24805, 24806, 20160, 24808, 4300, 14300, 18989, 14644, 21995, 3012, 14759, 24818, 24325, 24268, 14765, 14232, 24828, 19492, 24830, 22848, 22973, 24845, 24846, 13656, 5538, 15071, 19204, 14186, 14246, 19296, 24850, 24851, 18768, 23388, 15142, 17903, 13898, 17724, 18412, 18122, 21800, 5582, 18994, 13943, 14480, 14597, 20458, 19725, 21917, 17808, 19552, 18146, 17771, 19957, 19778, 19994, 7548, 13950, 19255, 18464, 14579, 13908, 19791, 14021, 18274, 19978, 5796, 17867, 18734, 20151, 24860, 20063, 24666, 14588, 20412, 20460, 14098, 24862, 5969, 19102, 6308, 24195, 24254, 14183, 14243, 17315, 23419, 14272, 24875, 15287, 19407, 19568, 18115, 19403, 15262, 18077, 17744, 24878, 18353, 13944, 1230, 5707, 19549, 24881, 14466, 24883, 15132, 14485, 24886, 24260, 20076, 18537, 20199, 19690, 6522, 5264, 19981, 23442, 17953, 18649, 14066, 2528, 20441, 24898, 24899, 24891, 13714, 13913, 14065, 13912, 14056, 21979, 24910, 20090, 14101, 13960, 14660, 22361, 14712, 14314, 24918, 7716, 24740, 19271, 24925, 24927, 12811, 24877, 14564, 19399, 13805, 14605, 2843, 5338, 14654, 13761, 12832, 24940, 24941, 14702, 14703, 976, 14238, 20599, 24952, 24872, 24953, 24959, 24961, 24962, 24965, 24972, 15114, 1122, 24980, 7296, 15068, 24986, 822, 15140, 24987, 24989, 197, 24992, 24993, 5614, 24996, 24197, 24279, 24037, 17336, 19645, 15282, 5583, 15285, 17028, 18319, 18600, 6192, 25015, 25018, 25019, 25020, 25022, 5834, 5921, 17760, 25030, 5702, 15662, 25036, 945, 17016, 25040, 24874, 7409, 25044, 5748, 17526, 25048, 17704, 17386, 24329, 18333, 25050, 5575, 18106, 19615, 25052, 3978, 5898, 25053, 7594, 25054, 7355, 25058, 18326, 17913, 18085, 25060, 25061, 25063, 23996, 25066, 25068, 17770, 5750, 17231, 17027, 18046, 6117, 7375, 5799, 24797, 19358, 17561, 18701, 24063, 25088, 25093, 25094, 25098, 25104, 5191, 25105, 24842, 25113, 25114, 11828, 25120, 21948, 24900, 25125, 15410, 25131, 13666, 25136, 14130, 25138, 24403, 25141, 13712, 15158, 17066, 14363, 24849, 18816, 25149, 21740, 25154, 17443, 11847, 17453, 13948, 19863, 14120, 25161, 17902, 14464, 19349, 19804, 19446, 18796, 14536, 18576, 25167, 19543, 25174, 14049, 556, 8026, 19928, 14057, 13903, 20022, 19554, 19971, 20136, 23318, 25181, 18628, 24912, 14684, 5831, 20070, 19521, 14481, 20207, 25188, 23416, 15370, 13847, 25191, 1268, 1140, 117, 5493, 25195, 5765, 17714, 20181, 23648, 25201, 17059, 5747, 25207, 25010, 24539, 13980, 1558, 25215, 17055, 6208, 9225, 25222, 25224, 5854, 25234, 25240, 7584, 25244, 25246, 25251, 25257, 25258, 17534, 25265, 283, 6294, 7552, 22524, 7606, 17109, 25274, 6199, 25281, 7619, 25283, 17103, 20120, 25286, 6202, 25290, 25291, 6016, 7712, 5923, 14293, 5866, 7724, 25316, 22542, 25319, 25321, 2077, 25324, 25325, 25326, 25327, 25330, 25333, 25338, 25340, 25344, 25347, 25355, 9504, 25359, 25360, 25362, 7889, 25371, 25377, 25379, 7919, 25385, 17158, 25390, 25392, 6102, 25396, 25398, 23650, 25400, 6756, 25402, 18050, 6489, 25408, 23975, 25414, 25416, 25417, 25421, 6100, 25422, 25426, 6651, 25436, 25437, 25438, 1176, 25441, 25444, 17193, 2242, 6547, 25467, 6820, 25469, 25470, 25475, 5594, 25479, 6025, 25483, 25487, 25490, 25493, 25495, 2182, 25502, 25503, 6595, 25508, 8388, 25510, 25512, 25513, 25521, 25526, 16502, 25529, 25531, 25538, 24332, 25541, 25543, 6696, 6663, 8844, 11283, 25566, 6602, 25570, 2344, 25583, 25593, 25598, 1133, 1687, 25629, 1788, 25634, 25635, 25644, 25645, 25649, 25650, 25651, 25659, 25660, 25661, 25663, 25666, 25667, 10350, 25671, 25673, 25679, 25681, 25684, 25688, 25690, 25694, 25697, 25700, 25701, 25702, 22362, 25711, 25658, 25733, 25739, 25745, 25761, 25764, 25766, 25769, 25770, 25774, 25775, 25781, 25789, 25796, 25802, 25806, 25810, 25812, 25814, 7707, 25827, 25830, 25832, 25835, 25840, 25845, 25847, 25852, 25856, 25861, 25863, 25884, 25885, 25891, 22722, 25894, 25897, 25898, 9877, 25905, 429, 25920, 25923, 25924, 25927, 25954, 25958, 25964, 25965, 25970, 25971, 25980, 25984, 25991, 25994, 25999, 26000, 26006, 26011, 26015, 26016, 26028, 26033, 26035, 26038, 26046, 26065, 26075, 26076, 26081, 9750, 26082, 26095, 26097, 26102, 26103, 26111, 17252, 26114, 26115, 26116, 26121, 26127, 26128, 26131, 26133, 26140, 26142, 26145, 26147, 26150, 26152, 26154, 26159, 26160, 26165, 26168, 26169, 26170, 26188, 26191, 26195, 26198, 26209, 26219, 26221, 26222, 26223, 26226, 26227, 26228, 2198, 26240, 26249, 26250, 26252, 26259, 26271, 26277, 26284, 26289, 1891, 26297, 26304, 26306, 26308, 26310, 26311, 26317, 26318, 26320, 26326, 26327, 26328, 26340, 26349, 26359, 26362, 26363, 26376, 26384, 26392, 6603, 26393, 26394, 26397, 26403, 26404, 26414, 26425, 26435, 26440, 26442, 26446, 26449, 26458, 26460, 26463, 26465, 26468, 26477, 26479, 26490, 26491, 26507, 26508, 26518, 26527, 2134, 26535, 26544, 26003, 26548, 26550, 26554, 26561, 26562, 26565, 26572, 26587, 26588, 1462, 3256, 26597, 26607, 26611, 26614, 26620, 26621, 26622, 26623, 26624, 26637, 26640, 26642, 26644, 26648, 26651, 26654, 26656, 26667, 26676, 26678, 26682, 26685, 26333, 26688, 26689, 26690, 26692, 26693, 26694, 26696, 26703, 26705, 26711, 26713, 26086, 26719, 25966, 26721, 26313, 26726, 7832, 26727, 26733, 26735, 26737, 26738, 26742, 26743, 26750, 26751, 26752, 26758, 26759, 26765, 26773, 26779, 26347, 26786, 26787, 26793, 26796, 26797, 26802, 26803, 26805, 26806, 26808, 11602, 26812, 26813, 26818, 26823, 26824, 26829, 26830, 26832, 26833, 26835, 26841, 12258, 26847, 26850, 26853, 26863, 26871, 26872, 16855, 26577, 26886, 26888, 26547, 26895, 26897, 26900, 26907, 26917, 26925, 26928, 26933, 26934, 26948, 26952, 26960, 26973, 26977, 26982, 26997, 26998, 27000, 27005, 27008, 27012, 27014, 27017, 27022, 27029, 27034, 27043, 27050, 24937, 15381, 14910, 5959, 20649, 4101, 27063, 17569, 5817, 5809, 25228, 1827, 1821, 25216, 27083, 24893, 1905, 6099, 5857, 25209, 27093, 15581, 2144, 27096, 7690, 15752, 27100, 27102, 27108, 1781, 27114, 27117, 6518, 6591, 27133, 27139, 27159, 27162, 27163, 27151, 7067, 6705, 6322, 5260, 27177, 27178, 23542, 138, 27181, 27182, 5623, 17399, 24328, 1245, 27191, 1592, 6238, 23455, 15297, 5299, 27204, 148, 27216, 27062, 17451, 17069, 27224, 27226, 6217, 27228, 17077, 27231, 23478, 6158, 6118, 5946, 27241, 27244, 1904, 27249, 27106, 5825, 340, 27256, 319, 27258, 22599, 22719, 27264, 2194, 6284, 27275, 23530, 7700, 27105, 27109, 1920, 27284, 27285, 27286, 27289, 27297, 27301, 27306, 27307, 27311, 2136, 6542, 7802, 27321, 27323, 27123, 27330, 27334, 27339, 27343, 7579, 25459, 6206, 6587, 25461, 6576, 6606, 27357, 27361, 27370, 10957, 6679, 23656, 2299, 27382, 15553, 27395, 27398, 6892, 27402, 27403, 23583, 27410, 27427, 14581, 27436, 27438, 27440, 27441, 24365, 6862, 6923, 27451, 23716, 17150, 6894, 27459, 27463, 27465, 27470, 6645, 27484, 27497, 27501, 27509, 23647, 5965, 27516, 27518, 27526, 27529, 7015, 27532, 27541, 27545, 1123, 18807, 5806, 27551, 15578, 4160, 12848, 27562, 7163, 27568, 27571, 27574, 27581, 27053, 6027, 15569, 27589, 1566, 17309, 2259, 27596, 5957, 27600, 27601, 18388, 6203, 27603, 6463, 27369, 24161, 5436, 1977, 17113, 27622, 27627, 16060, 27643, 27646, 27650, 27651, 27652, 27653, 27656, 25451, 27670, 6863, 6932, 27676, 27677, 27679, 27686, 20334, 27690, 27695, 27696, 27697, 27698, 27699, 27700, 27702, 27716, 27721, 27726, 27732, 27738, 27741, 27742, 27747, 27749, 27752, 27761, 27773, 27776, 27778, 12874, 27785, 27787, 27794, 27808, 27814, 27818, 27829, 27832, 27839, 27844, 12581, 27849, 27850, 27853, 27855, 27858, 27859, 27862, 6959, 27871, 27872, 11964, 27880, 27892, 1813, 27903, 27904, 27913, 27914, 27915, 27917, 27919, 27932, 27933, 27934, 27935, 27945, 27946, 27948, 27955, 27956, 27959, 27961, 27974, 8139, 27985, 27987, 14157, 5740, 28000, 28003, 28004, 28008, 28009, 28011, 28019, 28023, 28024, 28035, 28037, 28039, 25035, 22318, 28044, 28045, 28050, 28053, 28059, 28064, 28066, 28072, 28073, 28077, 28083, 20631, 28089, 28096, 16909, 28103, 28113, 28118, 28132, 28133, 28134, 28141, 28146, 28152, 28154, 28157, 28158, 28171, 28173, 11738, 19075, 21613, 28182, 13627, 28187, 28190, 22876, 14178, 28201, 13576, 28206, 28207, 28211, 28214, 28216, 15304, 28238, 28242, 9119, 28246, 28248, 7159, 28250, 28251, 28258, 28269, 13757, 17331, 13654, 21794, 23161, 28287, 28288, 19386, 28293, 28296, 28305, 28313, 28314, 23332, 18975, 28319, 23242, 2725, 28320, 28324, 23343, 28333, 28343, 28344, 28345, 13929, 17697, 23413, 20249, 19894, 18220, 20057, 20208, 14545, 14054, 2848, 20064, 28356, 28359, 9114, 19109, 28367, 28373, 23915, 27740, 28380, 17665, 28384, 28387, 28389, 4938, 28392, 12058, 28403, 28405, 28407, 28261, 14361, 28416, 18893, 28423, 28424, 14233, 28426, 28429, 24780, 28434, 24209, 28442, 13815, 25070, 28447, 28450, 24105, 28463, 28464, 28468, 28470, 28473, 14339, 28475, 28477, 28478, 17630, 28490, 28491, 28492, 28502, 28503, 28513, 28521, 17767, 28534, 28538, 28545, 28546, 28547, 19723, 28552, 6578, 24445, 13645, 12864, 24751, 14602, 18702, 15255, 18368, 7057, 28558, 6331, 28561, 28568, 21595, 28569, 15548, 28571, 28576, 28577, 28581, 28582, 28587, 28588, 28590, 28593, 28599, 28603, 28604, 28536, 28609, 28611, 21619, 28619, 3266, 28620, 28621, 28626, 28628, 28618, 13185, 28629, 28631, 28632, 28635, 28653, 28658, 28661, 13522, 1943, 13392, 28669, 28670, 4504, 28674, 28675, 4057, 28686, 1309, 3400, 1457, 28708, 28709, 28712, 22323, 28720, 28724, 28728, 28731, 28733, 28744, 28748, 28750, 28751, 28752, 28762, 28765, 28766, 28768, 28778, 28782, 28791, 28793, 28798, 28803, 28805, 28814, 28818, 28820, 28832, 28833, 1702, 28842, 28845, 28848, 28849, 7356, 28868, 28888, 28899, 28904, 28910, 28922, 28923, 28927, 28928, 28929, 28933, 28935, 253, 3423, 28950, 28954, 28957, 6396, 28959, 27077, 28960, 28961, 28963, 28977, 1326, 25647, 29006, 29010, 29011, 9988, 29018, 29019, 29022, 29024, 29027, 29029, 29030, 29040, 29052, 4594, 29058, 29064, 29066, 14931, 29077, 29080, 29090, 29094, 29095, 29096, 29100, 29101, 29103, 29104, 29108, 29109, 29120, 12551, 29126, 29131, 29144, 29156, 29157, 29159, 29161, 29162, 29165, 29167, 29168, 29169, 29174, 29175, 29176, 29178, 25843, 29182, 26358, 29194, 29201, 29212, 29215, 29219, 29220, 29223, 28984, 29224, 29226, 29227, 29228, 29238, 29248, 29249, 29251, 29258, 29271, 29280, 28947, 29287, 29298, 29299, 29302, 29303, 25630, 29305, 29309, 29310, 29312, 29314, 29316, 29317, 4251, 29324, 29332, 1798, 29339, 29349, 29372, 29379, 29384, 29390, 24349, 29413, 29436, 29440, 29441, 29444, 29453, 29455, 29457, 29463, 29468, 29470, 29481, 29484, 29487, 29488, 29491, 29497, 29498, 29502, 29504, 29505, 29506, 29523, 29526, 29532, 29535, 29539, 29545, 29550, 29552, 29553, 29558, 29564, 29573, 29579, 29586, 29594, 29595, 29596, 29597, 29603, 29610, 29611, 29615, 29622, 29624, 29632, 29633, 29640, 17026, 29644, 29652, 29653, 29654, 29661, 29667, 29670, 29679, 29684, 29685, 29696, 16061, 29702, 29706, 29716, 16461, 29732, 29746, 29747, 29749, 29407, 29754, 29756, 29761, 29784, 29787, 29800, 29801, 29804, 29809, 29813, 29822, 29825, 29827, 29828, 29829, 27086, 29831, 29834, 6742, 29838, 29840, 29841, 25913, 29853, 29861, 29867, 29870, 29872, 29874, 29875, 29876, 29877, 29880, 29881, 29888, 29889, 29890, 29893, 29896, 29899, 29909, 29910, 29913, 29920, 29923, 29925, 29926, 29927, 29929, 29930, 29933, 29934, 29942, 29951, 29953, 29957, 29958, 29961, 29964, 29965, 29981, 29593, 29988, 29992, 29993, 29995, 29999, 30000, 30005, 30006, 30010, 30017, 30029, 30031, 30034, 30037, 30044, 30048, 30055, 30057, 30060, 30061, 30063, 30068, 30073, 30089, 30091, 30096, 835, 30116, 30136, 30145, 30149, 30152, 30161, 25452, 30164, 30167, 15989, 30170, 30171, 30176, 30177, 30187, 30197, 30200, 30212, 7661, 30220, 30222, 30225, 30230, 30233, 30241, 30246, 30266, 30268, 30269, 30270, 30275, 25760, 30286, 30291, 30298, 1132, 30300, 30302, 30308, 30311, 30313, 30314, 30319, 30322, 29630, 30326, 30329, 30335, 30339, 30348, 30351, 30353, 30354, 30357, 30379, 30381, 30387, 30388, 30396, 30397, 30399, 16587, 30409, 30414, 30418, 30427, 30435, 30442, 30443, 30459, 30463, 30465, 30466, 30478, 30481, 30488, 16600, 30501, 30503, 30505, 30514, 30515, 30521, 30528, 30532, 30533, 30536, 30538, 30542, 30547, 30548, 30552, 30568, 30576, 30579, 30587, 30588, 30592, 30599, 30608, 22987, 27838, 13248, 30623, 9294, 30627, 30630, 30631, 27055, 161, 7325, 30644, 30647, 30658, 30660, 5908, 5589, 20783, 3424, 30673, 30677, 30684, 30692, 30697, 30700, 30703, 30706, 30709, 30711, 30723, 30725, 30728, 30731, 30732, 20962, 30735, 30739, 30740, 30743, 21059, 30765, 25348, 30769, 16380, 30773, 30777, 30778, 30780, 30787, 30790, 30791, 30792, 30794, 30805, 30806, 30812, 16857, 30815, 21247, 8487, 30825, 21207, 30828, 30831, 7858, 30852, 30856, 30858, 30863, 30866, 6831, 2273, 30875, 16400, 21527, 30878, 30883, 30884, 30885, 7934, 14798, 6020, 5374, 30897, 30898, 30900, 1103, 19316, 22161, 22248, 30904, 30905, 6579, 17792, 5812, 22025, 17484, 22671, 30918, 30919, 1575, 22646, 30927, 6945, 18971, 16794, 17311, 30940, 30944, 6040, 30949, 30953, 30954, 30957, 30958, 25306, 24043, 30968, 30969, 30971, 30972, 30980, 6185, 8079, 30990, 27189, 30994, 30998, 31000, 31001, 6746, 6083, 31008, 6478, 18944, 6233, 31018, 9715, 31020, 31022, 2370, 25350, 31030, 31033, 31039, 31042, 27367, 25295, 27254, 31059, 31060, 31065, 31066, 31067, 31078, 31082, 31084, 19722, 31085, 6617, 2186, 31091, 31095, 27634, 1881, 31097, 6536, 31105, 31106, 31107, 31111, 31114, 31116, 31122, 31124, 8284, 31126, 6647, 31128, 6276, 31132, 31136, 31137, 31139, 31140, 31141, 31142, 31145, 31146, 31148, 31151, 31152, 31154, 31155, 6252, 31162, 15851, 31165, 31169, 31174, 31175, 8381, 31179, 8304, 23720, 6701, 8412, 8768, 16395, 6970, 31205, 7049, 31211, 31214, 31226, 31231, 31232, 31236, 14935, 31242, 31244, 14797, 31246, 31248, 15093, 18890, 15207, 5586, 23793, 31255, 31256, 7322, 31258, 6488, 19383, 7318, 359, 20685, 5794, 31263, 7340, 7332, 24761, 7377, 7359, 31266, 2236, 5801, 31269, 25076, 25059, 31273, 18869, 5886, 27388, 5926, 25212, 24252, 31295, 31303, 31304, 31306, 18721, 6370, 7478, 31322, 17121, 31324, 19952, 7525, 31329, 31332, 23573, 18455, 31336, 31338, 31340, 7555, 25280, 31354, 1787, 17090, 7623, 31358, 30937, 27980, 7705, 7571, 31371, 17660, 135, 7574, 31387, 31388, 6182, 31390, 17119, 31394, 7544, 7580, 14593, 17093, 7384, 15268, 17021, 31400, 31401, 31404, 31410, 31414, 31417, 31423, 8113, 22702, 31425, 25259, 31430, 31431, 31369, 31440, 6239, 31442, 31448, 7739, 31464, 31465, 20732, 31471, 18142, 31483, 31485, 27266, 31487, 6432, 25299, 2168, 31502, 31503, 17241, 31517, 31519, 6150, 31520, 17164, 6688, 31527, 31535, 31542, 31544, 31545, 27448, 31547, 18961, 31554, 31560, 31563, 17491, 31567, 31572, 8457, 31577, 8010, 6710, 31582, 8041, 25577, 31592, 31595, 31596, 31597, 31599, 17396, 31606, 31610, 31612, 31615, 31619, 8105, 19869, 25424, 2231, 17197, 31635, 31639, 31652, 31654, 6500, 6698, 31664, 31665, 31666, 31669, 31670, 31671, 31672, 31675, 6921, 31681, 31682, 31685, 31689, 31690, 31691, 25482, 25514, 31695, 31697, 31705, 31710, 31715, 31716, 31719, 31725, 31727, 31729, 31730, 31737, 31739, 31748, 31749, 31760, 31764, 31767, 30816, 27409, 31775, 31778, 31787, 31788, 25420, 8474, 31792, 17404, 27435, 6555, 31797, 31800, 8499, 31808, 31811, 31817, 6812, 31818, 17271, 18727, 8525, 6909, 25530, 31829, 31832, 8375, 8376, 31846, 31847, 6927, 31848, 31849, 31855, 17239, 31871, 21369, 31879, 31880, 31885, 31889, 31891, 31892, 6657, 31902, 31904, 7032, 31916, 25568, 31920, 31921, 31922, 31924, 31929, 31930, 8797, 31942, 31943, 31945, 17280, 31954, 8870, 31958, 31959, 31973, 31977, 31979]\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "\n",
    "idx = random.randint(0,len(list(test.keys())))\n",
    "\n",
    "# print(UserCF.recommend(list(test.keys())[0], 10, 380))\n",
    "# print(UserCF.recommend(list(test.keys())[1], 10, 380))\n",
    "# print(UserCF.recommend(list(test.keys())[2], 10, 380))\n",
    "# print(UserCF.recommend(list(test.keys())[3], 10, 380))\n",
    "\n",
    "print(UserCF.recommend(list(test.keys())[idx], 10, 380))\n",
    "print(list(test.keys()))\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
